python中查看变量内存地址的方法 您所在的位置:网站首页 python 查看变量内存大小 python中查看变量内存地址的方法

python中查看变量内存地址的方法

#python中查看变量内存地址的方法| 来源: 网络整理| 查看: 265

一、 变量的声明

python语言是动态语言

变量不需要事先声明变量的类型不需要声明

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的 类型是变量所指的内存中对象的类型。

等号(=)用来给变量赋值。

等号(=)运算符左边是一个变量名,等号(=)运算符右边是其指向的具体的值。

二、 变量命名规则:

可以包含以下字符

大小写字母(a-z,A-Z)变量名区分大小写; a 和 A 是不同的变量数字(0-9)下划线(_)

==不可以以数字开头==

三、 变量命名潜规则: 不要以单下划线和双下划线开头;如:_user或 __user变量命名要易读;如:user_name,而不是username不用使用标准库中(内置)的模块名或者第三方的模块名不要用这些 Python 内置的关键字: >>> import keyword>>> keyword.kwlist['False', 'None', 'True', 'and', 'as', 'assert',  'break','class', 'continue', 'def', 'del', 'elif', 'else', 'except',  'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',  'lambda','nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try',  'while','with', 'yield']> 上面打印出来的数据在 Python 中被称为列表, 列表是 Python中一种数据结构。关于数据结构,后面的章节会详细说明。>列表的都是 Python3 中的关键字。#可以使用一下方法验证,返回 True 就是 Python 的关键字>>> keyword.iskeyword('del')True>>> 四、变量赋值

python 中使用等号 = 对变量进行赋值,。

等号左边被称为变量名,等号右边称为变量的值,确切的说是对象

n = 5 五、Python 中的变量是什么

在 python 中究竟该如何正确理解变量的赋值过程呢?

s = 'hello'

以上的变量赋值,应该说成把变量分配给对象更合理。

hello 这个字符串对象会在内存中先被创建,之后再把变量名 s 分配给这个对象。

1bffe96c10a3068dfaacc4190c718bc3.png af51fb5f08c0720bd072b3b5f19bb708.png

所以要理解 Python 中的变量赋值,应该始终先看等号右边。

对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。

变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字。

比如: 张三 和 小张 指的都是同一个人

请看下面的代码示例:

a = 1b = aa = 2print(b)  # b 会是 ?

a = 1 时如下图:

65e92896b14de0586b8a57188b39ead4.png

b = a 时如下图:

23779cfb6c3217720a770d3adfcf9334.png

a = 2 时如下图:

1151efbc5e455ec4e382500c3f2abcbc.png

上面的 b = a 我们称它为 传递引用,此时对象会拥有两个名称(标签) ,分别是 a 和 b

六、变量的多元赋值

在 Python3 中你可以这样给变量赋值

In [2]: x, y, z = 1, 2, 3In [3]: xOut[3]: 1In [4]: yOut[4]: 2In [5]: zOut[5]: 3

当然也可以这样

In [10]: a, b, c = 'abc'In [11]: aOut[11]: 'a'In [12]: bOut[12]: 'b'In [13]: cOut[13]: 'c'

假如你需要对一个序列类型中的数据进行一一解开赋值,那就需要等号左边的变量名和序列类型数据中的元素个数相同。

这种多元赋值方式在 Python 中也可以称为元组解包。

元组解包其实适用于所有的序列类型(可迭代对象)的数据: 字符串、列表、元组等

假如你需要对一个序列类型中的数据进行一一解开赋值,那就需要等号左边的变量名和序列类型数据中的元素个数相同。

当然也可以只要其中的一个,或者一部分,像下面的几种情况:

1. 只要要其中的一部分

有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况 Python 并没有提供特殊的语法。 但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。

In [22]: data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]In [23]: _, shares, price, _ = dataIn [24]: sharesOut[24]: 50In [25]: priceOut[25]: 91.1

在这里必须保证你选用的那些占位变量名在其他地方没被使用到。

这里采用了英文的短下划线 _ 作为临时变量名。

这样懂行的人看到这个,就会知道在之后的代码中将不会再次用到此变量。

2. 只要第一个

In [14]: s, *_ = ['shark', 18, 100]In [15]: sOut[15]: 'shark'

* 是 python3 中的一个表达式,他可以把没有明确指出元素搜集起来。

可以称它为 星号解压语法

3. 只要最后一个

In [16]: *_, score = ['shark', 18, 100]In [17]: scoreOut[17]: 100

4. 要第一个,其他的都放到列表中

In [19]: name, *info = ['shark', 18, 100]In [20]: nameOut[20]: 'shark'In [21]: infoOut[21]: [18, 100]

值得注意的是上面解压出的 info 变量永远都是列表类型,不管解压的数字的数量是多少(包括 0 个)

你可以试着把等号左边的两个调换一下位置^_^

5. 嵌套的也好使

In [28]: record = ('wanghong', 50, 123.45, (12, 18, 2012))In [29]: name, *_, (*_, year) = recordIn [30]: nameOut[30]: 'wanghong'In [31]: yearOut[31]: 2012

6. 用于 字符串的分割

In [35]: line = 'nobody:x:99:99:Nobody:/:/sbin/nologin'In [36]: name, * fields, sh = line.split(":")In [37]: nameOut[37]: 'nobody'In [38]: shOut[38]: '/sbin/nologin'

7. 解压迭代元素为可变长元组的序列

records = [    ('foo', 1, 2),    ('bar', 'hello'),    ('foo', 3, 4),]def do_foo(x, y):    print('foo', x, y)def do_bar(s):    print('bar', s)for tag, *args in records:    if tag == 'foo':        do_foo(*args)    elif tag == 'bar':        do_bar(*args)执行结果:foo 1 2bar hellofoo 3 4 七、Python 中对象(变量的值)都有三个特性 # 唯一标识,是对象在内存中的整数表示形式,在 CPython 中可以理解为# 内存地址# 可以用 id 这个函数查看id(10)    # 直接给一个对象id(n)      # 给你变量名# 类型, 对象都有不同的类型,用 type 这个函数查看type(10)type(n)# 值,对象本身10


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有